9.3 scrapy选择器的用法,css,xpath,正则。pyquery

scrapy至少有三种选择器,很大很多。理论上学会两种就够用了。

项目组都用一个选择器最好了。

一定要学会正则表达式。

image
image

第一种介绍CSS选择器

image
image
image

标签成对出现。

div,p不管div和p有什么关系,都搜索出来

div p 选择div下的所有p元素可以是父子关系也可以是爷孙关系等。

div>p 这个只能是父子关系。

还有一个函数 extract_first()切片,extract()切片脱壳

image

脱壳后

image

选择器返回的一般都是一个list,要记住,我们想要的都是结果文本

image

而li和a是父子关系。

示例:

image

p标签,li标签,a标签


单独抽离scrapy选择器

都是借用什么找到什么。如:借用class=‘top’这个属性找到li标签


此时做断点调试最合适。

辅助断点测试参考文章:

http://blog.csdn.net/lanchunhui/article/details/49514297

image

image

id唯一,class不唯一

012代表几个标签。

image

xpath写法

跟文件路径很像,默认第一层/html,单斜杠就是一层

双斜杠是搜索的意思,跟css什么都不带一样

文本和属性,属性是class=‘top’,文本是li的div用text()

下图是属性写法

image
image

Xpath的使用方法

寻找可以匹配 xpath query 的节点,并返回 SelectorList 的一个实例结果,单一化其所有 元素。列表元素也实现了 Selector 的接口。query 是包含XPATH查询请求的字符串

该方法可以通过 response.xpath() 调用

选取节点

Xpath 使用路径表达式在 XML文档中选取节点。节点是通过沿着路径或者step来选取的。

下面列出了最有用的路径表达式:

[图片上传失败...(image-91e392-1517579430475)]

Xpath选择器使用示例:

Xpath选择方法之前在入门课程第四课已学习过了,仍然使用上面的例子:

查找ul标签下的li元素:

sel.xpath(‘/html/body/ul/li’)

可见其返回了一个SelectorList实例

查找所有的li标签:

sel.xpath(‘//li’)

可见其返回了一个SelectorList实例

查找第三个li标签下的第一个p标签:

sel.xpath(‘//li’)[2].xpath(‘./p’)[0]

可见其返回了一个SelectorList实例

同样可以调用.extract()方法提取数据:

查找a标签下的div标签的文本:

sel.xpath(‘/html/body/ul/li/a/div/text()’).extract_first()


RE的使用方法

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE)它通常被用来检索、替换那些符合某个模式(规则)的文本。

常用元字符:

[图片上传失败...(image-df6557-1517579430475)]

[图片上传失败...(image-be1293-1517579430475)]

[图片上传失败...(image-a908c-1517579430475)]

匹配神器:

  • (.*)具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。
  • (.*?)则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。

pyquery的使用方法

pyquery可以让你使用类似jQuery语法来对xml进行操作,pyquery语法尽可能跟jQuery语法相似 ,类似于css

pyquery使用lxml库对xml和html进行快速的处理

pyquery这个库目前还不是一个可以跟JavaScript代码交互的库

兼容性好,不用各种脱壳

建议平时用pyquery

image

提文本,提属性

image

pyquery选择器使用示例:

打开同级目录下的HTML文件,所获取的jpy变量是PyQuery,可以直接使用jpy对其进行选择:

from pyquery import PyQuery

with open('test.html' , encoding='utf-8') as f:

text = f.read()

jpy = PyQuery(text)

pass

查找class=‘top’的元素的文本:

jpy(‘.top’).text()

查找class=‘top’的元素的class属性:

jpy(‘.top’).attr(‘class’)

查找li标签下所有的文本,遍历时候必须加items函数

items = jpy(‘li’)

for i in items.items():

···· print(i.text())

li的div

li的div的div

li的p

li的a的div

查找li标签下所有的class属性

items = jpy(‘li’)

for i in items.items():

···· print(i.attr(‘class’))

top

top

None

None

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容